<?php

/**
 * CSV actions.
 *
 * @package    tfe
 * @subpackage CSV
 * @author     3emeIG
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class CSVActions extends sfActions {


    public function executeMails(sfWebRequest $request) {
        // ne pas afficher quoi que ce soit
        $this->setLayout(false);

        $path = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'CSV'.DIRECTORY_SEPARATOR.$request->getParameter('filename');
//        throw new exception($request->getParameter('filename'));
        // vérifier que le fichier existe
        $this->forward404Unless(file_exists($path));

        // définir la réponse http avec le fichier comme contenu
        $this->getResponse()->clearHttpHeaders();
        $this->getResponse()->setHttpHeader('Pragma: public', true);
        $this->getResponse()->setContentType('application/vnd.ms-excel');
        $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=Mails_'. date('Y-m-d') .'.csv');
        $this->getResponse()->sendHttpHeaders();
        $this->getResponse()->setContent(file_get_contents($path));

        unlink($path);

        return sfView::NONE;
    }

    public function executeLettres(sfWebRequest $request) {
        // ne pas afficher quoi que ce soit
        $this->setLayout(false);
        
        $path = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'CSV'.DIRECTORY_SEPARATOR.$request->getParameter('filename');

        // vérifier que le fichier existe
        $this->forward404Unless(file_exists($path));

        // définir la réponse http avec le fichier comme contenu
        $this->getResponse()->clearHttpHeaders();
        $this->getResponse()->setHttpHeader('Pragma: public', true);
        $this->getResponse()->setContentType('application/vnd.ms-excel');
        $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=Lettres_'. date('Y-m-d') .'.csv');
        $this->getResponse()->sendHttpHeaders();
        $this->getResponse()->setContent(file_get_contents($path));

        unlink($path);

        return sfView::NONE;
    }


// Creation des CSV (via dashboard) si contact possede email, adresse et les envois par mails/lettres a true
    public function executeCsvLettres(sfWebRequest $request)
    {
        // creation d'un nom unique de fichier sur base d'un hashage de la concaténation du nom d'utilisateur et d'un timestamp
        // puis appelle à la méthode objet
        $filename = sha1($this->getUser().date('ymd').time()).'.csv';
        self::createCsvEnvoyerNewsParLettre($filename);

        // redirection vers telechargement du fichier CSV genere
        $this->redirect('CSV/envoyerCsvLettres?filename='.$filename);
    }

    public function executeCsvMails(sfWebRequest $request)
    {
        // creation d'un nom unique de fichier sur base d'un hashage de la concaténation du nom d'utilisateur et d'un timestamp
        // puis appelle à la méthode objet
        $filename = sha1($this->getUser().date('ymd').time()).'.csv';
        self::createCsvEnvoyerNewsParMail($filename);

        // redirection vers telechargement du fichier CSV genere
        $this->redirect('CSV/envoyerCsvMails?filename='.$filename);
    }

// Fonctions d'envoi des fichiers vers le client (telechargement automatique)
    public function executeEnvoyerCsvMails(sfWebRequest $request)
    {
        // ne pas afficher quoi que ce soit
        $this->setLayout(false);

        $path = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'CSV'.DIRECTORY_SEPARATOR.$request->getParameter('filename');

        // vérifier que le fichier existe
        $this->forward404Unless(file_exists($path));

        // définir la réponse http avec le fichier comme contenu
        $this->getResponse()->clearHttpHeaders();
        $this->getResponse()->setHttpHeader('Pragma: public', true);
        $this->getResponse()->setContentType('application/vnd.ms-excel');
        $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=Mails_'. date('Y-m-d') .'.csv');
        $this->getResponse()->sendHttpHeaders();
        $this->getResponse()->setContent(file_get_contents($path));

        unlink($path);

        return sfView::NONE;
    }

    public function executeEnvoyerCsvLettres(sfWebRequest $request)
    {
        // ne pas afficher quoi que ce soit
        $this->setLayout(false);

        $path = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'CSV'.DIRECTORY_SEPARATOR.$request->getParameter('filename');

        // vérifier que le fichier existe
        $this->forward404Unless(file_exists($path));

        // définir la réponse http avec le fichier comme contenu
        $this->getResponse()->clearHttpHeaders();
        $this->getResponse()->setHttpHeader('Pragma: public', true);
        $this->getResponse()->setContentType('application/vnd.ms-excel');
        $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=Lettres_'. date('Y-m-d') .'.csv');
        $this->getResponse()->sendHttpHeaders();
        $this->getResponse()->setContent(file_get_contents($path));

        unlink($path);

        return sfView::NONE;
    }


// Fonctions de creation des CSV (si le contact possede newsletters par mail ou par lettre)
    public static function createCsvEnvoyerNewsParLettre($filename)
    {
        $path = sfConfig::get('sf_root_dir') . DIRECTORY_SEPARATOR .'CSV'. DIRECTORY_SEPARATOR;
        touch($path.$filename);
        $flux = fopen($path.$filename, 'w');

        // entete des colonnes du fichier CSV
        fputcsv($flux, array('Contact','adresse'),';');


        $contacts = Doctrine::getTable('Contact')->findAll();

        foreach ($contacts as $contact)
        {
                if($contact->getId() != NULL)
                {
                    $adresse = $contact->getAdresse(); //  $adresse=$contact->getRue() .' '. $contact->getNumero() .' - '. $contact->getCodePostal() .' '. $contact->getLocalite() .' '. $contact->getPays();
                    $newslettersLettre = $contact->getEnvoyerNewsParLettre();
                    if($newslettersLettre && $adresse != "")
                    {
                        fputcsv($flux, array($contact, $adresse) , ";");
                    }
                }
        }
        fclose($flux);
    }

    public static function createCsvEnvoyerNewsParMail($filename)
    {
        $path = sfConfig::get('sf_root_dir') . DIRECTORY_SEPARATOR .'CSV'. DIRECTORY_SEPARATOR;
        touch($path.$filename);
        $flux = fopen($path.$filename, 'w');

        // entete des colonnes du fichier CSV
        fputcsv($flux, array('Contact','e-mail'),';');


        $contacts = Doctrine::getTable('Contact')->findAll();

        foreach ($contacts as $contact)
        {
                if($contact->getId() != NULL)
                {
                    $mails = $contact->getEmails();
                    $newslettersLettre = $contact->getEnvoyerNewsParMail();
                    if($newslettersLettre && count($mails) > 0)
                    {
                        fputcsv($flux, array($contact, $mails[0]) , ";");
                    }
                }
        }
        fclose($flux);
    }
}
